def check_dates(date):
    def con(func):
        def wrapper(name):
            print('这是一个祝福发射器')
            print('{}日写在{}函数前的话：\n祝{}新年快乐！'.format(date,func.__name__,name))
            print('——————————————————————————')
            func(name)
            print('——————————————————————————')
            print('  （  ^    ^  ）  \n  （    ~~    ）',end='')
        return wrapper
    return con

#语法糖写法：
'''
@con
def add(x,y):
    print('{}+{}={}'.format(x,y,x+y))
a,b=map(int,input('输入两个数，计算加法').split())
add(a,b)
'''
#多层嵌套：每层都return内部函数
#复制了一段代码为例（https://blog.csdn.net/lIujunXHU/article/details/136377981）

import functools
def repeat(num_times):
    def inner_repeat(func):
        @functools.wraps(func)#作用是保存原函数的有关信息
        def wrapper(*args, **kwargs):
            for i in range(num_times):
               func(*args, **kwargs)
        return wrapper
    return inner_repeat
#同理，语法糖可以叠加，叠加时按照从上到下的顺序完成
dates=input('输入日期')
@check_dates(dates)
@repeat(num_times=1)
def hello(name):
    print('Hello {}!'.format(name))

'''
面向对象
面向对象三大特点：
1）封装
2）多态
3）继承
使用class定义一个类
通用格式：
class 类名(object表示最顶级父类):
    类属性 = 值
    def __init__(self, 参数):（一般self指的是实例本身，也可以使用其他变量）
        self.属性1 = 参数1
        self.属性2 = 参数2
上面定义对象属性————————————————————下面定义对象方法
    def 方法1(self, 参数):
        # 方法代码
    def 方法2(self, 参数):
        # 方法代码
'''
class Student:
    def __init__(self,name,age):
        self.name=name
        self.__age=age
    def share_info(self):
        print(f'名称为{self.name}')
        print(f'年龄为{self.__age}')
    def study(self):
        pass#pass跳过，表示没有内容
    def play_games(self):
        pass
#创建一个子类，使用父类的一些属性和方法（继承）
class Junior(Student):
    def __init__(self,name,age):
        # 使用super调用父类的构造函数
        super().__init__(name,age)
    #重写在父类中pass的study方法
    def study(self):
        print('Easy')

    def share_info(self):
        super().share_info()
#创建另一个子类，并定义不同的study方法（多态）
class Senior(Student):
    def __init__(self, name, age):
        # 使用super调用父类的构造函数
        super().__init__(name, age)

    def study(self):
        print('Hard')

    def share_info(self):
        super().share_info()
'''
#创建对象
my=Senior('uni',18)
#访问属性：
print(my.name)#输出uni
#调用方法：
my.share_info()
my.study()
'''
'''
名称为uni
年龄为18
Hard
'''
class Classmates(Student):
    def __init__(self, name, age):
        # 使用super调用父类的构造函数
        super().__init__(name, age)

    def share_info(self):
        super().share_info()
    def study(self):
        print('too rolling!')
    def play_games(self):
        print('All Perfect!')
YiMingN=Classmates('YiMingN',18)
'''
YiMingN.study()#too rolling!
YiMingN.play_games()#All Perfect!
'''
if dates=='1.28':











    hello(YiMingN.name)












